/**
 * md 文档相关的函数
 * 检查 indexedDB 里面是否有 对应的 文档
 * 从 indexedDB 的增删改查
 * 
 * 用 axios 获取 对应的 文档
 * 
 */

import { toRaw } from 'vue'
import config from '../config/index.js'

export default function menuController () {
  // 获取菜单的对象仓库
  const { menu: dbMenu } = config.help.stores()
  
  // 获取菜单信息，包括菜单子项信息 by axios
  const loadMenu = async (ver = 1) => {
    const url = `${config.baseUrl}docs/.nfpress/menu.json?ver=${ver}`
    const menuInfo = await config.axios.get(url)
    // console.log('菜单信息', menuInfo.data)
    return menuInfo.data
  }
  
  // 从 indexedDB 里面加载 项目信息，如果没有，则用 axios 加载
  const getMenu = async (ver = 1) => {
    // 获取 菜单信息 by indexedDB
    const menuInfo = await dbMenu.get()
    if (menuInfo.length > 0) {
      // 有信息，判断版本
      if (menuInfo[0].ver == ver) {
        // 是最新版，直接返回
        return menuInfo
      } else {
        // 不是最新版本，用 axios 加载菜单信息
        const menuList = await loadMenu(ver)
        // 保存
        menuList.forEach((m, index) => {
          menuList[index].ver = ver
          m.ver = ver
          dbMenu.put(m)
        })
        return menuList
      }
    } else {
      // 没有信息，用 axios 加载菜单信息
      const menuList = await loadMenu(ver)
      // 保存
      menuList.forEach((m, index) => {
        menuList[index].ver = ver
        m.ver = ver
        dbMenu.add(m)
      })
      return menuList
    }
  }

  // 保存菜单
  const saveMenu = async (_menu) => {
    const __menu = toRaw(_menu)
    return await dbMenu.set(__menu)
  }
 
  return {
    loadMenu,
    getMenu,
    saveMenu
  }
}
